
using Core.Extensions;
using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Features;
using Core.Resources;

namespace Core.Items.Robots
{
    /// <summary>
    /// Mesmer mk2 robot class
    /// </summary>
    
    public sealed class MesmerMk2 : RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.MesmerMk2"/> class.
        /// </summary>
        public MesmerMk2()
            : base(
            "Mesmer Mk2",
            Traduction.desc_mesmer,
            FactionsEnum.Nuimqol,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.HeavyMech,
            new ISlot[]{ 
				new Slot(0, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(1, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret, SizesEnum.Small|SizesEnum.Medium),
				new Slot(2, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(3, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(4, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret, SizesEnum.Small|SizesEnum.Medium),
				new Slot(5, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(6, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules), },
            new IFeature<object>[]{ 
				new AccumulatorCapacity<double>(4125),
				new AccumulatorRechargeTime<double>(720),
				new CpuPerformance<double>(365),
				new ReactorPerformance<double>(1075),
				new ArmorAmount<double>(2850),
				new ChemicalResistance<double>(30),
				new KineticResistance<double>(45),
				new SeismicResistance<double>(150),
				new ThermalResistance<double>(10),
				new SurfaceHitSize<double>(10.00),
				new InterferenceEmission<double>(6.00),
				new InterferenceMinimum<double>(90.00),
				new InterferencePeak<double>(405.00),
				new InterferenceRadius<double>(300.00),
				new LockingRange<double>(330),
				new LockingTime<double>(12.50),
				new MaximumTargets<double>(8),
				new MissileGuidanceFailure<double>(0.1),
				new SensorStrength<double>(85),
				new SignalDetection<double>(80.00),
				new SignalMasking<double>(80.00),
				new ReloadingTime<double>(10),
				new CargoCapacity<double>(12.00),
				new RobotMass<double>(33660.00),
				new SlopeCapacity<double>(45),
				new TopSpeed<double>(43.20),
				new Volume<double>(22.50), },
            new IBonusModifier[]
                {
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumMagneticWeaponFalloff, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Medium magnetic weapon falloff" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumLaserFalloff, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Medium laser falloff" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumFirearmFalloff, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Medium firearm falloff" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallMagneticWeaponFalloff, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "small magnetic weapon falloff" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallLaserFalloff, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "small laser falloff" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallFirearmFalloff, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "small firearm falloff" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumMagneticWeaponDamage, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Medium magnetic weapon damage" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.ArmorRepairAmount, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Armor repair amount" },
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MediumMagneticWeaponDamage, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "Medium magnetic weapon damage" },
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SmallMagneticWeaponDamage, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "Small magnetic weapon damage" },
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MediumLaserDamage, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "Medium laser damage" },
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SmallLaserDamage, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "Small laser damage" },
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MediumFirearmDamage, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "Medium firearm damage" },
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SmallFirearmDamage, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "small firearm damage" },
                },
            new ICondition<IExtension>[] 
            { 
                new ExtensionCondition<NuimqolRobotControl>(10), 
                new ExtensionCondition<AdvancedRobotics>(4) 
            })
        {
        }
    }
}